iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
自我挑戰組

gRPC通訊框架認識與實作系列 第 14

gRPC通訊框架認識與實作【Day 14】

  • 分享至 

  • xImage
  •  

我們之前都是製作一個request來然後一個response回去的基本款,其實大部分的傳遞都是屬於這種類型的傳遞方式。
接下來我們要開始嘗試實作有stream種類的傳遞模式。

今天我們要開始來看第二種,client單發對server多發,這邊我們會使用同步以及非同步的method各別來實作一次。

我們先在.proto檔的IronManService中新增Client2Servers這個method

service IronManService{
  rpc IronMan01(IronManRequest01) returns (IronManResponse01) {}
  rpc IronMan02(IronManRequest02) returns (IronManResponse02) {}
  rpc Client2Servers(IronManRequest01) returns (stream IronManResponse01) {}
}

重新執行protobuf讓method生成。

然後我們在IronManServiceImpl中override剛才新設定的method,
因為client的request是一個訊息過來,因此只要接收一組訊息即可,所以我們可以這樣實作

@Override
public void client2Servers(IronManProto.IronManRequest01 request, StreamObserver<IronManProto.IronManResponse01> responseObserver) throws InterruptedException {
    String name =  request.getName();
    String age = request.getAge();
    System.out.println("我收到client的Name訊息: " + name);
    System.out.println("我收到client的Age訊息: " + age);

    for(int i = 0 ; i < 10 ; i++){
        //設定好回傳的response
        IronManProto.IronManResponse01.Builder builder = IronManProto.IronManResponse01.newBuilder();
        builder.setResult("我接收到client的訊息,現在是第 " + i + " 秒");
        IronManProto.IronManResponse01 ironManResponse01 = builder.build();

        responseObserver.onNext(ironManResponse01);
        Thread.sleep(1000);
    }

    responseObserver.onCompleted();
}

一樣透過get函式取得request的內容,然後使用for迴圈將資料傳遞回client端,並且用sleep()讓每次回傳的區間都間隔一秒。

這樣就透過server端實作出多發的response給client端,明天我們就來實作client端的部分吧。


上一篇
gRPC通訊框架認識與實作【Day 13】
下一篇
gRPC通訊框架認識與實作【Day 15】
系列文
gRPC通訊框架認識與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言